﻿Imports System.Data.SqlClient

Public Class UsuarioDAO


    Public Function listar() As Collection
        Dim lista As New Collection

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDUSUARIO, NOMBRE, APE_PATERNO, APE_MATERNO, EDAD, USUARIO, CONTRASEÑA, DIRECCION, DISTRITO, TELEFONO, EMAIL, SEXO FROM USUARIO "
            Dim cmd As New SqlCommand(sql, cn)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            While dr.Read
                Dim modelo As New Usuario
                modelo.idusuario = dr(0).ToString
                modelo.nombre = dr(1).ToString
                modelo.ap_paterno = dr(2).ToString
                modelo.ap_materno = dr(3).ToString
                modelo.edad = dr(4).ToInteger
                modelo.usuario = dr(5).ToString
                modelo.contraseña = dr(6).ToString
                modelo.direccion = dr(7).ToString
                modelo.distrito = dr(8).ToString
                modelo.telefono = dr(9).ToString
                modelo.email = dr(10).ToString
                modelo.sexo = dr(11).ToString
                lista.Add(modelo)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return lista
    End Function

    Public Function insertar(ByVal modelo As Usuario) As Usuario
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "INSERT INTO USUARIO (NOMBRE, APE_PATERNO, APE_MATERNO, EDAD, USUARIO, CONTRASEÑA, DIRECCION, DISTRITO, TELEFONO, EMAIL, SEXO) VALUES (@VALOR1, @VALOR2, @VALOR3, @VALOR4, @VALOR5, @VALOR6, @VALOR7, @VALOR8, @VALOR9, @VALOR10, @VALOR11)"


            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.nombre)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.ap_paterno)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.ap_materno)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.edad)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.usuario)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.contraseña)
            cmd.Parameters.AddWithValue("@VALOR7", modelo.direccion)
            cmd.Parameters.AddWithValue("@VALOR8", modelo.distrito)
            cmd.Parameters.AddWithValue("@VALOR9", modelo.telefono)
            cmd.Parameters.AddWithValue("@VALOR10", modelo.email)
            cmd.Parameters.AddWithValue("@VALOR11", modelo.sexo)

            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("UsuarioDAO: No insertó")
            End If

            ' LEER EL ULTIMO ID
            sql = "SELECT @@IDENTITY"
            cmd = New SqlCommand(sql, cn)
            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                modelo.idusuario = CType(dr(0), String)
            End If

            dr.Close()
            cn.Close()

        Catch ex As Exception
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo

    End Function

    Public Sub actualizar(ByVal modelo As Usuario)
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "UPDATE USUARIO SET NOMBRE=@VALOR1, APE_PATERNO=@VALOR2, APE_MATERNO=@VALOR3, EDAD=@VALOR4, USUARIO=@VALOR5, CONTRASEÑA=@VALOR6, DIRECCION=@VALOR7, DISTRITO=@VALOR8, TELEFONO=@VALOR9, EMAIL=@VALOR10, SEXO=@VALOR11  WHERE IDUSUARIO=@VALOR12"

            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.nombre)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.ap_paterno)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.ap_materno)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.edad)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.usuario)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.contraseña)
            cmd.Parameters.AddWithValue("@VALOR7", modelo.direccion)
            cmd.Parameters.AddWithValue("@VALOR8", modelo.distrito)
            cmd.Parameters.AddWithValue("@VALOR9", modelo.telefono)
            cmd.Parameters.AddWithValue("@VALOR10", modelo.email)
            cmd.Parameters.AddWithValue("@VALOR11", modelo.sexo)
            cmd.Parameters.AddWithValue("@VALOR12", modelo.idusuario)

            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("UsuarioDAO: No actualizó")
            End If

            cn.Close()

        Catch ex As Exception
            MsgBox(ex.Message)
            Throw New DAOExcepcion(ex.ToString)
        End Try
    End Sub

    Public Sub eliminar(ByVal idusuario As String)
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "DELETE FROM USUARIO WHERE IDUSUARIO=@VALOR0"

            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR0", idusuario)

            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("UsuarioDAO: No eliminó")
            End If

            cn.Close()

        Catch ex As Exception
            Throw New DAOExcepcion(ex.ToString)
        End Try
    End Sub



    Public Function obtener(ByVal idusuario As String) As Usuario
        Dim modelo As New Usuario

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDUSUARIO, NOMBRE, APE_PATERNO, APE_MATERNO, EDAD, USUARIO, CONTRASEÑA, DIRECCION, DISTRITO, TELEFONO, EMAIL, SEXO FROM USUARIO WHERE IDUSUARIO=@VALOR1"
            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR1", idusuario)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                modelo.idusuario = dr(0).ToString
                modelo.nombre = dr(1).ToString
                modelo.ap_paterno = dr(2).ToString
                modelo.ap_materno = dr(3).ToString
                modelo.edad = dr(4).ToString
                modelo.usuario = dr(5).ToString
                modelo.contraseña = dr(6).ToString
                modelo.direccion = dr(7).ToString
                modelo.distrito = dr(8).ToString
                modelo.telefono = dr(9).ToString
                modelo.email = dr(10).ToString
                modelo.sexo = dr(11).ToString

            End If

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo
    End Function

    Public Function buscarPorNombre(ByVal nombre As String) As Collection
        Dim lista As New Collection

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDUSUARIO, NOMBRE, APE_PATERNO, APE_MATERNO, EDAD, USUARIO, CONTRASEÑA, DIRECCION, DISTRITO, TELEFONO, EMAIL, SEXO FROM USUARIO WHERE UPPER(NOMBRE) LIKE @VALOR1"
            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", "%" + nombre.ToUpper + "%")

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()

            While dr.Read
                Dim modelo As New Usuario
                modelo.idusuario = dr(0).ToString
                modelo.nombre = dr(1).ToString
                modelo.ap_paterno = dr(2).ToString
                modelo.ap_materno = dr(3).ToString
                modelo.edad = dr(4).ToString
                modelo.usuario = dr(5).ToString
                modelo.contraseña = dr(6).ToString
                modelo.direccion = dr(7).ToString
                modelo.distrito = dr(8).ToString
                modelo.telefono = dr(9).ToString
                modelo.email = dr(10).ToString
                modelo.sexo = dr(11).ToString
                lista.Add(modelo)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return lista
    End Function

   

    Public Function validar(ByVal modelo As Usuario) As Usuario
        Dim usuario As New Usuario

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDUSUARIO, NOMBRE, AP_PATERNO, AP_MATERNO, EDAD, USUARIO, CONTRASEÑA, DIRECCION, DISTRITO, TELEFONO, EMAIL, SEXO FROM USUARIO WHERE IDUSUARIO=@VALOR1 AND CONTRASEÑA=@VALOR2"
            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR1", modelo.idusuario)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.contraseña)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                usuario.idusuario = dr(0).ToString
                usuario.nombre = dr(1).ToString
                usuario.ap_paterno = dr(2).ToString
                usuario.ap_materno = dr(3).ToString
                usuario.edad = dr(4).ToString
                usuario.usuario = dr(5).ToString
                usuario.contraseña = dr(6).ToString
                usuario.direccion = dr(7).ToString
                usuario.distrito = dr(8).ToString
                usuario.telefono = dr(9).ToString
                usuario.email = dr(10).ToString
                usuario.sexo = dr(11).ToString
            Else
                Throw New DAOExcepcion("Usuario y/o clave incorrecto")
            End If

            dr.Close()

            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return usuario
    End Function

    Public Function logear(ByVal modelo As Usuario) As Usuario
        Dim usuario As New Usuario
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT USUARIO, CONTRASEÑA FROM USUARIO WHERE USUARIO = @VALOR1 AND CONTRASEÑA= @VALOR2"


            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.usuario)
            cmd.Parameters.AddWithValue("@VALOR2", modelo.contraseña)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                usuario.usuario = dr(0).ToString
                usuario.contraseña = dr(1).ToString
            Else
                Throw New DAOExcepcion("Usuario y/o clave incorrecto")
            End If
            dr.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo
    End Function

End Class